--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
vendor/lxmfy/tests/conftest.py v4.7.2-rc.1 (b777193f) Text, 4.71 KB
T8b949e"""Test configuration and fixtures for LXMFy tests."""
Tff7b72import T7ee787os
Tff7b72import T7ee787tempfile
Tff7b72from T7ee787pathlib Tff7b72import Te6edf3Path
Tff7b72import T7ee787pytest
Tff7b72import T7ee787RNS
Tff7b72from T7ee787LXMF Tff7b72import Te6edf3LXMRouter
Tff7b72from T7ee787lxmfy Tff7b72import Te6edf3BotConfigTb4b4b4, Te6edf3LXMFBot
Tf0883e@pytestTff7b72.Td2a8fffixtureTb4b4b4(Te6edf3scopeTff7b72=Ta5d6ff"Ta5d6ffsessionTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8fftest_config_dirTb4b4b4(Tb4b4b4)Tb4b4b4:
T8b949e"""Create a temporary directory for test configurations."""
Tff7b72with Te6edf3tempfileTff7b72.Td2a8ffTemporaryDirectoryTb4b4b4(Tb4b4b4) Tff7b72as Te6edf3temp_dirTb4b4b4:
Te6edf3config_path Tff7b72= Te6edf3PathTb4b4b4(Te6edf3temp_dirTb4b4b4) Tff7b72/ Ta5d6ff"Ta5d6fftest_configTa5d6ff"
Te6edf3config_pathTff7b72.Td2a8ffmkdirTb4b4b4(Te6edf3exist_okTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72yield Te6edf3config_path
Tf0883e@pytestTff7b72.Td2a8fffixtureTb4b4b4(Te6edf3scopeTff7b72=Ta5d6ff"Ta5d6ffsessionTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8ffreticulum_instanceTb4b4b4(Te6edf3test_config_dirTb4b4b4)Tb4b4b4:
T8b949e"""Initialize a Reticulum instance for testing."""
Te6edf3config_dir Tff7b72= Te6edf3test_config_dir Tff7b72/ Ta5d6ff"Ta5d6ffreticulumTa5d6ff"
Te6edf3config_dirTff7b72.Td2a8ffmkdirTb4b4b4(Te6edf3exist_okTff7b72=Tff7b72TrueTb4b4b4)
T8b949e# Initialize Reticulum with test config
Te6edf3reticulum Tff7b72= Te6edf3RNSTff7b72.Td2a8ffReticulumTb4b4b4(
Te6edf3configdirTff7b72=Tffa657strTb4b4b4(Te6edf3config_dirTb4b4b4)Tb4b4b4,
Te6edf3loglevelTff7b72=Te6edf3RNSTff7b72.Td2a8ffLOG_CRITICALTb4b4b4, T8b949e# Minimize logging in tests
Te6edf3verbosityTff7b72=T79c0ff0Tb4b4b4,
Tb4b4b4)
Tff7b72yield Te6edf3reticulum
T8b949e# Cleanup
Tff7b72tryTb4b4b4:
Te6edf3RNSTff7b72.Td2a8ffReticulumTff7b72.Td2a8ffexit_handlerTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72pass
Tf0883e@pytestTff7b72.Td2a8fffixtureTb4b4b4(Te6edf3scopeTff7b72=Ta5d6ff"Ta5d6fffunctionTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8fftest_identityTb4b4b4(Te6edf3reticulum_instanceTb4b4b4, Te6edf3test_config_dirTb4b4b4)Tb4b4b4:
T8b949e"""Create a test identity."""
Te6edf3identity Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTb4b4b4(Tb4b4b4)
Tff7b72return Te6edf3identity
Tf0883e@pytestTff7b72.Td2a8fffixtureTb4b4b4(Te6edf3scopeTff7b72=Ta5d6ff"Ta5d6fffunctionTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8fftest_destinationTb4b4b4(Te6edf3test_identityTb4b4b4, Te6edf3test_config_dirTb4b4b4)Tb4b4b4:
T8b949e"""Create a test destination for messaging."""
Te6edf3dest Tff7b72= Te6edf3RNSTff7b72.Td2a8ffDestinationTb4b4b4(
Te6edf3test_identityTb4b4b4,
Te6edf3RNSTff7b72.Td2a8ffDestinationTff7b72.Td2a8ffINTb4b4b4,
Te6edf3RNSTff7b72.Td2a8ffDestinationTff7b72.Td2a8ffSINGLETb4b4b4,
Ta5d6ff"Ta5d6fflxmfTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6fftestTa5d6ff"Tb4b4b4,
Tb4b4b4)
Te6edf3destTff7b72.Td2a8ffset_proof_strategyTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffDestinationTff7b72.Td2a8ffPROVE_NONETb4b4b4) T8b949e# Disable proof for tests
Tff7b72return Te6edf3dest
Tf0883e@pytestTff7b72.Td2a8fffixtureTb4b4b4(Te6edf3scopeTff7b72=Ta5d6ff"Ta5d6fffunctionTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8fflxmf_routerTb4b4b4(Te6edf3test_identityTb4b4b4, Te6edf3test_config_dirTb4b4b4)Tb4b4b4:
T8b949e"""Create an LXMF router for testing."""
Te6edf3storage_path Tff7b72= Te6edf3test_config_dir Tff7b72/ Ta5d6ff"Ta5d6fflxmf_storageTa5d6ff"
Te6edf3storage_pathTff7b72.Td2a8ffmkdirTb4b4b4(Te6edf3exist_okTff7b72=Tff7b72TrueTb4b4b4)
Te6edf3router Tff7b72= Te6edf3LXMRouterTb4b4b4(
Te6edf3identityTff7b72=Te6edf3test_identityTb4b4b4,
Te6edf3storagepathTff7b72=Tffa657strTb4b4b4(Te6edf3storage_pathTb4b4b4)Tb4b4b4,
Te6edf3autopeerTff7b72=Tff7b72FalseTb4b4b4, T8b949e# Disable auto-peering in tests
Te6edf3propagation_limitTff7b72=T79c0ff10Tb4b4b4,
Te6edf3delivery_limitTff7b72=T79c0ff10Tb4b4b4,
Tb4b4b4)
T8b949e# Register delivery identity (creates destination internally)
Te6edf3delivery_destination Tff7b72= Te6edf3routerTff7b72.Td2a8ffregister_delivery_identityTb4b4b4(
Te6edf3test_identityTb4b4b4,
Te6edf3display_nameTff7b72=Ta5d6ff"Ta5d6ffTestRouterTa5d6ff"Tb4b4b4,
Tb4b4b4)
T8b949e# Store the delivery destination for tests
Te6edf3routerTff7b72.Td2a8ff_test_delivery_dest Tff7b72= Te6edf3delivery_destination
Tff7b72return Te6edf3router
Tf0883e@pytestTff7b72.Td2a8fffixtureTb4b4b4(Te6edf3scopeTff7b72=Ta5d6ff"Ta5d6fffunctionTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8fftest_bot_configTb4b4b4(Te6edf3test_config_dirTb4b4b4)Tb4b4b4:
T8b949e"""Create a test bot configuration."""
Tff7b72return Te6edf3BotConfigTb4b4b4(
Te6edf3nameTff7b72=Ta5d6ff"Ta5d6ffTestBotTa5d6ff"Tb4b4b4,
Te6edf3announceTff7b72=T79c0ff0Tb4b4b4, T8b949e# Disable announcing in tests
Te6edf3announce_enabledTff7b72=Tff7b72FalseTb4b4b4,
Te6edf3adminsTff7b72=Tffa657setTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3hot_reloadingTff7b72=Tff7b72FalseTb4b4b4,
Te6edf3rate_limitTff7b72=T79c0ff100Tb4b4b4, T8b949e# High rate limit for tests
Te6edf3cooldownTff7b72=T79c0ff1Tb4b4b4,
Te6edf3max_warningsTff7b72=T79c0ff10Tb4b4b4,
Te6edf3warning_timeoutTff7b72=T79c0ff60Tb4b4b4,
Te6edf3command_prefixTff7b72=Ta5d6ff"Ta5d6ff/Ta5d6ff"Tb4b4b4,
Te6edf3cogs_enabledTff7b72=Tff7b72FalseTb4b4b4,
Te6edf3permissions_enabledTff7b72=Tff7b72FalseTb4b4b4,
Te6edf3storage_typeTff7b72=Ta5d6ff"Ta5d6ffjsonTa5d6ff"Tb4b4b4,
Te6edf3storage_pathTff7b72=Tffa657strTb4b4b4(Te6edf3test_config_dir Tff7b72/ Ta5d6ff"Ta5d6ffbot_storageTa5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3first_message_enabledTff7b72=Tff7b72FalseTb4b4b4,
Te6edf3signature_verification_enabledTff7b72=Tff7b72FalseTb4b4b4,
Te6edf3require_message_signaturesTff7b72=Tff7b72FalseTb4b4b4,
Te6edf3require_stampsTff7b72=Tff7b72FalseTb4b4b4,
Te6edf3stamp_costTff7b72=Tff7b72NoneTb4b4b4,
Te6edf3test_modeTff7b72=Tff7b72TrueTb4b4b4, T8b949e# Enable test mode to skip RNS initialization
Tb4b4b4)
Tf0883e@pytestTff7b72.Td2a8fffixtureTb4b4b4(Te6edf3scopeTff7b72=Ta5d6ff"Ta5d6fffunctionTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8fftest_botTb4b4b4(Te6edf3test_bot_configTb4b4b4, Te6edf3test_config_dirTb4b4b4)Tb4b4b4:
T8b949e"""Create a test bot instance."""
T8b949e# Override config_path for testing
T8b949e# Use a unique config path per test
Tff7b72import T7ee787uuid
Te6edf3unique_config_path Tff7b72= Te6edf3test_config_dir Tff7b72/ Ta5d6fffTa5d6ff"Ta5d6ffbot_Tffd700{Te6edf3uuidTff7b72.Td2a8ffuuid4Tb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffhexTb4b4b4[Tb4b4b4:T79c0ff8Tb4b4b4]Tffd700}Ta5d6ff"
Te6edf3unique_config_pathTff7b72.Td2a8ffmkdirTb4b4b4(Te6edf3exist_okTff7b72=Tff7b72TrueTb4b4b4)
Te6edf3config Tff7b72= Te6edf3test_bot_configTff7b72.Td2a8ff__dict__Tff7b72.Td2a8ffcopyTb4b4b4(Tb4b4b4)
Te6edf3configTb4b4b4[Ta5d6ff"Ta5d6ffstorage_pathTa5d6ff"Tb4b4b4] Tff7b72= Tffa657strTb4b4b4(Te6edf3unique_config_path Tff7b72/ Ta5d6ff"Ta5d6ffstorageTa5d6ff"Tb4b4b4)
Te6edf3bot Tff7b72= Te6edf3LXMFBotTb4b4b4(Tff7b72*Tff7b72*Te6edf3configTb4b4b4)
Te6edf3botTff7b72.Td2a8ffconfig_path Tff7b72= Tffa657strTb4b4b4(Te6edf3unique_config_pathTb4b4b4)
Tff7b72yield Te6edf3bot
T8b949e# Cleanup
Tff7b72tryTb4b4b4:
Te6edf3botTff7b72.Td2a8ffcleanupTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72pass
Tf0883e@pytestTff7b72.Td2a8fffixtureTb4b4b4(Te6edf3scopeTff7b72=Ta5d6ff"Ta5d6fffunctionTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8fftest_message_dataTb4b4b4(Tb4b4b4)Tb4b4b4:
T8b949e"""Sample message data for testing."""
Tff7b72return Tb4b4b4{
Ta5d6ff"Ta5d6ffcontentTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffTest message contentTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6fftitleTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffTest TitleTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffsource_hashTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffabc123def456Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffdef456abc789Ta5d6ff"Tb4b4b4,
Tb4b4b4}
Tf0883e@pytestTff7b72.Td2a8fffixtureTb4b4b4(Te6edf3scopeTff7b72=Ta5d6ff"Ta5d6fffunctionTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8fftemp_fileTb4b4b4(Tb4b4b4)Tb4b4b4:
T8b949e"""Create a temporary file for testing."""
Tff7b72with Te6edf3tempfileTff7b72.Td2a8ffNamedTemporaryFileTb4b4b4(Te6edf3modeTff7b72=Ta5d6ff"Ta5d6ffwTa5d6ff"Tb4b4b4, Te6edf3deleteTff7b72=Tff7b72FalseTb4b4b4) Tff7b72as Te6edf3fTb4b4b4:
Te6edf3fTff7b72.Td2a8ffwriteTb4b4b4(Ta5d6ff"Ta5d6ffTest file contentTa5d6ff"Tb4b4b4)
Te6edf3temp_path Tff7b72= Te6edf3fTff7b72.Td2a8ffname
Tff7b72yield Te6edf3temp_path
T8b949e# Cleanup
Tff7b72tryTb4b4b4:
Te6edf3osTff7b72.Td2a8ffunlinkTb4b4b4(Te6edf3temp_pathTb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72pass
Tf0883e@pytestTff7b72.Td2a8fffixtureTb4b4b4(Te6edf3autouseTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72def Td2a8ffcleanup_reticulumTb4b4b4(Tb4b4b4)Tb4b4b4:
T8b949e"""Clean up Reticulum state between tests."""
Tff7b72yield
T8b949e# Force cleanup of any lingering links or destinations
Tff7b72tryTb4b4b4:
T8b949e# This is a best-effort cleanup
Tff7b72pass
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72pass
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────